home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- #include <netdb.h>
- #include <sys/types.h>
- #include <sys/syslog.h>
- #include <netinet/in.h>
- #include <lineread.h>
-
- //#include <intuition/intuition.h>
-
- #include <proto/dos.h>
- #include <proto/exec.h>
- //#include <proto/intuition.h>
-
- char VersionTag[]="\0$VER: JoranAmimsgd 1.0 (14.12.93)";
-
- struct AmiMsg {
- struct MinNode am_Node;
- char *am_user;
- char *am_host;
- char *am_msg;
- struct sockaddr_in am_addr;
- time_t am_time;
- };
-
- struct AmiMsgMsg {
- struct Message amm_Msg;
- struct AmiMsg amm_AmiMsg;
- };
-
- #define PORTNAME "JoranAmiMsgWin"
-
- char user[15];
- char host[20];
- char msg[128];
- char Title[80];
-
- struct sockaddr_in his_addr;
- long addrlen;
- struct LineRead lr;
-
- extern long server_socket;
- long gethostname(char *,long len);
-
- void main(void)
- {
- fd_set readfds;
- int length,i;
- struct AmiMsgMsg amm;
- struct MsgPort *ReplyPort,*AmiMsgWinPort;
-
- if(server_socket==-1) exit(20);
-
- SetProgramName("JoranAmiMsgd");
-
- addrlen = sizeof (his_addr);
- if(getpeername(0,(struct sockaddr *)&his_addr, &addrlen)<0) exit(20);
-
- // drie regels ophalen van het formaat
- // HOST hostname:20
- // USER username:10
- // MSG message:40
-
- initLineRead(&lr,server_socket,RL_LFREQNUL,160);
- FD_ZERO(&readfds);
-
- i=0;
- while((i&7)!=7)
- {
- FD_SET(server_socket,&readfds);
- if(select(server_socket+1,&readfds,NULL,NULL,NULL)<0) exit(20);
- if(FD_SET(server_socket,&readfds))
- {
- length=lineRead(&lr);
- if(length==-1) exit(20);
- if(lr.rl_Line)
- {
- if(!strncmp("HOST ",lr.rl_Line,5))
- {
- strncpy(host,lr.rl_Line+5,sizeof(host));
- host[sizeof(host)-1]='\0';
- i|=1;
- }
- if(!strncmp("USER ",lr.rl_Line,5))
- {
- strncpy(user,lr.rl_Line+5,sizeof(user));
- user[sizeof(user)-1]='\0';
- i|=2;
- }
- if(!strncmp("MSG ",lr.rl_Line,4))
- {
- strncpy(msg,lr.rl_Line+4,sizeof(msg));
- msg[sizeof(msg)-1]='\0';
- i|=4;
- }
- }
- }
- }
- CloseSocket(server_socket);
-
- AmiMsgWinPort=NULL;
- if(ReplyPort=CreatePort(NULL,0))
- {
- amm.amm_AmiMsg.am_user=user;
- amm.amm_AmiMsg.am_host=host;
- amm.amm_AmiMsg.am_msg=msg;
- memcpy(&amm.amm_AmiMsg.am_addr,&his_addr,sizeof(struct sockaddr_in));
- amm.amm_AmiMsg.am_time=time(0);
-
- amm.amm_Msg.mn_ReplyPort=ReplyPort;
-
- Forbid();
- AmiMsgWinPort=FindPort(PORTNAME);
- if(AmiMsgWinPort) PutMsg(AmiMsgWinPort,(struct Message *)&amm);
- Permit();
-
- if(AmiMsgWinPort) WaitPort(ReplyPort);
-
- DeletePort(ReplyPort);
- }
- if(!AmiMsgWinPort)
- syslog(LOG_INFO,"%s@%s(%s): %s",user,host,inet_ntoa(his_addr.sin_addr),msg);
- }
-